
#region copyright notice
/* ====================================================================
 * The UncleGED Open Source Software License
 *
 * Copyright (c) 1999-2009 D. M. DeBacker. All rights reserved.
 * http://gatheringleaves.org/uged
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the
 *    distribution.
 *
 * 3. Products derived from this software may not be called "UncleGED",
 *    nor may "UncleGED" appear in their name, without prior written
 *    permission of D. M. DeBacker.
 *
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED.  IN NO EVENT SHALL D. M. DEBACKER BE LIABLE FOR ANY 
 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 
 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 
 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 * ====================================================================
 */
#endregion

using System;
using System.Xml;
using System.Xml.Schema;
using System.Xml.Serialization;
using System.IO;
using UncleGED.Utils;

namespace UncleGED.Application
{

   /// <summary>
   /// Class containing properties for an UncleGED project.
	/// These properties determine how the GEDCOM file is processed and transformed into HTML pages.
   /// </summary>
	public class UGedProject
   {
      #region Fields
      /// <summary>
      /// Defines the range in years of ABT
      /// </summary>
		/// <remarks>Used by <see cref="UncleGED.GedReader.EstimateBirthDates"/></remarks>
		public int AboutEquals = 2;
		/// <summary>
		/// Adds surnames as keywords on index page.
		/// </summary>
		/// <remarks>When this option is selected, Uncle GED adds all surnames found with a count greater than five to the Meta sections of the index page</remarks>
      public bool AddKeywords =  true;
		/// <summary>
		/// Replaces CONC tag with a space
		/// </summary>
		/// <remarks>The GEDCOM tag CONC is meant to be an indication that the current text is to be concatenated with any previous note text however many genealogy software package do ignore this rule and use CONC when they should use CONT. The prevent the text from the previous note text being concatenated with the the current line of note text set this property to true.</remarks>
      public bool AddSpaceToConc =  false;
		/// <summary>
		/// Adds a count of surnames to each surname on the Surnames page
		/// </summary>
		/// <remarks>When this option is selected, Uncle GED adds a count to each surname displayed on the surname page.</remarks>
      public bool AddSurnameCount =  true;
		/// <summary>
		/// Display author copyright on each page
		/// </summary>
		/// <remarks>When this option is selected, Uncle GED displays the Author's name and email within a copyright statement at the bottom of each page.</remarks>
      public bool AddUserCopyright =  false;
		/// <summary>
		/// The email address of the web pages' author
		/// </summary>
      public string AuthorsEmail =  "";
		/// <summary>
		/// The name of the web pages' author
		/// </summary>
      public string AuthorsName =  "";
		/// <summary>
		/// URL of the author's home page
		/// </summary>
		/// <remarks>A link to this page will be added to the table contents page (index.htm). Prior to rel. 4.01 this pointed to ../index.htm. You may now link to any page (URL) that you wish. If left blank, the link will not be added to the page.</remarks>
      public string AuthorsUrl =  "";
		/// <summary>
		/// Relative or absolute URL location of background file
		/// </summary>
		/// <remarks>The default is images/ug_bkgrd.gif. This should not be confused with physical location of the file on the local hard drive.</remarks>
      public string BackgroundFile =  "./images/ug_bkgrd.gif";
		/// <summary>
		/// Relative or absolute URL location of banner file.
		/// </summary>
		/// <remarks>The default is images/ug_banner.gif. This should not be confused with physical location of the file on the local hard drive.</remarks>
      public string BannerFile =  "./images/ug_banner.gif";
		/// <summary>
		/// Cutoff number of years in age for determining exclusion and privacy
		/// </summary>
		/// <remarks>Used by the <see cref="ExcludeLivingIndividualsAfterBirthCutOff"/> and <see cref="Privacy"/> functions.</remarks>
      public int BirthCutOffYears = 80;
		/// <summary>
		/// Last date (year) for the chronology listings. Any year after the ChronoCutOff date will not be listed in the chronology.
		/// </summary>
      public short ChronoCutOff = 1900;
		/// <summary>
		/// Adds links for the family pages to the chronology, occupations and locations pages.
		/// </summary>
      public bool ChronoLinks =  true;
		/// <summary>
		/// Extra text that appears on the Chronology of Events page.
		/// </summary>
      [XmlElement("ChronoPageText", Type = typeof(CDATA))]
      public CDATA ChronoPageText;
		/// <summary>
		/// The title of the Chronology of Events page.
		/// </summary>
      public string ChronoPageTitle = "Chronology Of Events";
		/// <summary>
		/// Create Chronology Of Events Page - When this option is selected, Uncle GED will create a Chronology of Events page.
		/// </summary>
      public bool CreateChronoPage =  true;
		/// <summary>
		/// When this option is selected, Uncle GED creates a GENDEX file called GENDEX.txt in the HTML directory.
		/// </summary>
		/// <remarks>Some may recall that bteween 1996 and 2004 there was a server out there that indexed the contents of thousands of personal genealogy web-sites using an indexing file called "gendex.txt". That site went off-line in the spring of 2004. Since that time I have found at least two sites that are active today as GENDEX servers: Genealogy Today and Family Tree Seeker.com.</remarks>
      public bool CreateGendexFile =  false;
		/// <summary>
		/// Create a listing report.
		/// </summary>
		/// <remarks>When this option is set to TRUE, Uncle GED creates a listing file when HTML pages are created. This listing file is a comma-delimited file that lists the individual's name, their RIN, and which HTML they appear in. Look for list.txt in the HTML directory.</remarks>
      public bool CreateListReport =  true;
		/// <summary>
		/// Create a locations page.
		/// </summary>
		/// <remarks>There are a number of options available for creating a listing of locations and place names. Selecting the "Create Locations Page" option will not only create this style of HTML page, but will also create a file called "loc_report.txt". The "loc_report.txt" provides a listing of all locations and place names found in your GEDCOM file and can be useful in locating problems with place names in the GEDCOM. Setting CreateLocPage to true creates the files listed above.</remarks>
      public bool CreateLocPage =  true;
		/// <summary>
		/// Create Occupations Page
		/// </summary>
		/// <remarks>Creates the occupation.html file. <seealso cref="IgnoreOccupations"/> and <seealso cref="OccLocEqualsOccText"/> </remarks>
      public bool CreateOccupationsPage =  true;
		/// <summary>
		/// Creates a page containing statistics for the GEDCOM file
		/// </summary>
		/// <remarks>When this option is selected, Uncle GED creates a statistics page that 
		/// lists the statistics for the GEDCOM file. Look for stats.htm in the HTML directory.
		///     <ul style="margin-left: 72pt">
      ///       <li>Source: The program that was used to create the gedcom file. </li>
      ///       <li>Source Name: The title of the program used to create the gedcom file. </li>
      ///       <li>Source Version: The version of the program used to create the gedcom file. </li>
      ///       <li>Creation Date: Date the gedcom file was created. </li>
      ///       <li>Creation Time: Time the gedcom file was created. </li>
      ///       <li>GEDCOM File Name: Name of the gedcom file. </li>
      ///       <li>Submitter Name: Name of the person who created the gedcom file. </li>
      ///       <li>Submitter E-mail: E-mail address of the person who created the gedcom file. </li>
      ///       <li>Number Of Individuals: Number of individuals found in the gedcom file. </li>
      ///       <li>Number Of Families: Number of families found in the gedcom file </li>
      ///       <li>Number Of Notes: Number of notes found in the gedcom file </li>
      ///       <li>Number Of Sources: Number of sources found in the gedcom file </li>
		///     </ul>
		/// </remarks>
      public bool CreateStatsPage =  true;
		/// <summary>
		/// Allows you to change the wording or even the language of the labels that appear of the Persons pages
		/// </summary>
      public DateStringProperties DateStrings =  new DateStringProperties();
		/// <summary>
		/// Display MRIN after marriage
		/// </summary>
		/// <remarks>When this option is selected, Uncle GED displays the MRIN (marriage reference number) in the title of the family HTML page.</remarks>
      public bool DisplayMRIN =  true;
		/// <summary>
		/// Display RIN after name
		/// </summary>
		/// <remarks>When this option is selected, Uncle GED displays the RIN (individual reference number) after each individuals name.</remarks>
      public bool DisplayRIN =  true;
		/// <summary>
		/// Use MS HTML Help Compiler to compile the web pages
		/// </summary>
		/// <remarks>
		/// The help authoring tool from Microsoft, HTML Help Workshop, can be used as an easy-to-use system for compiling your HTML files into a standard format used by the Microsoft Operating system for displaying on-line documentation (aka Help Files). 
		/// In order to compile your HTML files you will need to download and install the free HTML Help Workshop from Microsoft. 
		/// To compile your HTML files using UncleGED: 
		/// Select the "Compile HTML" option on the HTML Compiler tab of the Configuration Options dialog. 
		/// Specify the location of the HTML Helper Compiler (HHC) by clicking the button next to the text box below "Microsoft HTML Help Workshop Location" and navigating to the folder where the HTML Help Compiler is located. 
		/// With the "Compile HTML" option selected UncleGED will create all of the files needed to produce the compiled HTML file (.chm) and will invoke the HTML Help Compiler after it has completed the generation of the HTML files. The compiled HTML file will be located in the same directory as the HTML files and will have the same name as your GEDCOM file with the .chm extension.
		/// </remarks>
      public bool DoCompileHtml =  false;
		/// <summary>
		/// If true then UncleGED will call <see cref="GedReader.EstimateBirthDates "/> after processing the GEDCOM and prior to building the web pages.
		/// </summary>
      public bool DoDateEstimation =  false;
		/// <summary>
		/// If true then UncleGED will call <see cref="GedReader.ExcludeLivingIndividuals "/> after processing the GEDCOM and prior to building the web pages.
		/// </summary>
      public bool ExcludeLivingIndividualsAfterBirthCutOff =  false;
		/// <summary>
		/// Excludes notes from HTML pages
		/// </summary>
		/// <remarks>With option set to true any notes found in the GEDCOM file are excluded from the HTML pages</remarks>
      public bool ExcludeNotes =  false;
		/// <summary>
		/// Prefix for family pages file names.
		/// </summary>
		/// <remarks>As of UncleGED 5, the "family file prefix" feature allows the user to designate a 3 character naming convention for the files. This is useful if you want to split your maternal and paternal lines. For example I have one set of files that follow the pattern of debxxx.html for my father's side and another set with the pattern dobxxx.html for my mother's. If you set this three character prefix to something other than "fam" (for example "deb") then all famxxx.html files become debxxx.html and the other files will have the family file prefix prepended to them (for example locations.html becomes deb_locations.html and so forth).</remarks>
      public string FamFilePrefix =  "fam";
		/// <summary>
		/// The file source (path) of the GEDCOM to processed by UncleGED
		/// </summary>
      public string FileSource = "";
		/// <summary>
		/// Number that designates which family page is displayed first
		/// </summary>
      public int FirstFamily = 0;
		/// <summary>
		/// Places a menu bar at the top of the family pages.
		/// </summary>
		/// <remarks>Original versions of UncleGED did not have a menu bar at the top of the page</remarks>
		public bool FamPageMenuAtTop = false;
		/// <summary>
		/// File name of the GEDCOM with the path
		/// </summary>
      public string GedComFile =  "temp_ged55.ged";
		/// <summary>
		/// Path of the GEDCOM file without the file name
		/// </summary>
      public string GedcomPath = FolderMethods.GetUserPath() + "\\gedcom";
		/// <summary>
		/// Make Bold Most Recent Updates On Index
		/// </summary>
		/// <remarks>When this option is selected along with the MostRecentOnIndex option, Uncle GED will display all changes made in the last 90 days in formatting in bold. NOTE: The change dates are provided in GEDCOM files created with PAF and may not be in files produced by other software vendors. For change dates UncleGED looks for something like the following in the GEDCOM file: 1 CHAN 2 DATE 24 Feb 2002 3 TIME 12:34:12</remarks>
      public bool HiLiteMostRecent =  true;
		/// <summary>
		/// Specifies the path to the HTML Help Compiler
		/// </summary>
		/// <remarks>By default this C:\Program Files\HTML Help Workshop</remarks>
      public string HtmlHelpCompiler =  @"C:\Program Files\HTML Help Workshop";
		/// <summary>
		/// Directory where HTML files are to written
		/// </summary>
		/// <remarks>Specifies the directory to which the family pages and other HTML files (UncleGED output) will be written.</remarks>
      public string HtmlPath =  FolderMethods.GetUserPath() + "\\html";
		/// <summary>
		/// Do Not Print Occupations On Locations Page
		/// </summary>
		/// <remarks>Occupation listing are excluded from the Locations page (If the source of your GEDCOM file is FTW (Family Tree Maker) then set this option to true; otherwise leave cleared ).</remarks>
      public bool IgnoreOccupations =  true;
		/// <summary>
		/// Title of the Index of Individuals page
		/// </summary>
		/// <remarks>The default is "Index of Individuals"</remarks>
      public string IndiIndexPageTitle = "Index Of Individuals";
		/// <summary>
		/// Extra text to be displayed on the Index of Individuals page
		/// </summary>
		/// <remarks>This text may contain embedded HTML</remarks>
      [XmlElement("IndiIndexPageText", Type = typeof(CDATA))]
      public CDATA IndiIndexPageText;
		/// <summary>
		/// Extra text to be displayed on the Locations page
		/// </summary>
		/// <remarks>This text may contain embedded HTML</remarks>
		[XmlElement("LocationsPageText", Type = typeof(CDATA))]
      public CDATA LocationsPageText;
		/// <summary>
		/// Title of the Locations page
		/// </summary>
		/// <remarks>The default is "Locations"</remarks>
		public string LocationsPageTitle = "Locations";
		/// <summary>
		/// Display Event Dates On Locations Page
		/// </summary>
		/// <remarks>Displays a date (if available) between the individuals name and the event description.</remarks>
      public bool LocDisplayEventDates =  false;
		/// <summary>
		/// Tells UncleGED how to deal with estimated locations
		/// </summary>
		/// <remarks>Although not a part of the GEDCOM specification, there is a format used by the LDS in Ancestral files for entering "estimated" locations and that is to enter the location surrounded by the "&lt;" and "&gt;" characters. UncleGED automatically converts the "&lt;" and "&gt;" characters to "[" and "]" characters. The following options regarding estimated locations are as follows: 0. Do Not List Estimated Locations - locations surrounded by the "[" and "]" characters are not displayed. 1. Treat Estimated Locations The Same As Actual Locations - the "[" and "]" characters are dropped from the estimated locations and all locations are displayed together. 2. List Estimated Locations At Bottom Of Page - locations surrounded by the "[" and "]" characters are retained and are displayed at the bottom of the page.</remarks>
      public short LocEstimateMethod = 1;
		/// <summary>
		/// List location parts in reverse order
		/// </summary>
		/// <remarks>When selected an entry such as "Houston, Harris, Texas" will be displayed as "Texas, Harris, Houston".</remarks>
      public bool LocReverseOrder =  true;
		/// <summary>
		/// Tells UncleGED to strip leading and trailing punctuation from locations
		/// </summary>
      public bool LocStripTrailingPunc =  false;
		/// <summary>
		/// Extra text to be displayed on the Main page
		/// </summary>
		/// <remarks>This text may contain embedded HTML</remarks>
		[XmlElement("MainPageText", Type = typeof(CDATA))]
      public CDATA MainPageText;
		/// <summary>
		/// Title of the Main (TOC) page
		/// </summary>
		/// <remarks>The default is "My Family"</remarks>
		public string MainPageTitle = "My Family";
		/// <summary>
		/// Symbol (char) used to indicate more information on person pages
		/// </summary>
		/// <remarks>Mark "symbol" that appears on the persons page beside a person's name which indicates that more information appears on the linked page for this person.</remarks>
      public string MarkForMoreLinks = "+";
		/// <summary>
		/// A setting for the date estimation tool.
		/// </summary>
      public int MaxAgeDifference = 10;
		/// <summary>
		/// A setting for the date estimation tool.
		/// </summary>
      public int MaxChildBirth = 50;
		/// <summary>
		/// A setting for the date estimation tool.
		/// </summary>
      public int MaxIndPerPage = 50;
		/// <summary>
		/// A setting for the date estimation tool.
		/// </summary>
      public int MaxIterations = 5;
		/// <summary>
		/// A setting for the date estimation tool.
		/// </summary>
      public int MaxLivingAge = 75;
		/// <summary>
		/// A setting for the date estimation tool.
		/// </summary>
      public int MinChildBirth = 20;
		/// <summary>
		/// A setting for the date estimation tool.
		/// </summary>
      public int MinMarrAge = 20;
		/// <summary>
		/// Display Last Update For Individual On Index
		/// </summary>
		/// <remarks>Besides displaying the individual's name and birth date on the index, Uncle GED optionally displays the last date that this individuals record was updated.</remarks>
      public bool MostRecentOnIndex =  true;
		/// <summary>
		/// Display the most recent change date on family and person pages
		/// </summary>
		/// <remarks>When this option is selected, Uncle GED displays the most recent change date at the bottom of each family page. Example: The most recent update of information contained on this page was on: 15 July 2001. The date displayed here is determined by examining the change dates stored in the GEDCOM file for each of the individuals displayed uniquely on this page.</remarks>
      public bool MostRecentOnPage =  true;
		/// <summary>
		/// Occupation location equals occupation text
		/// </summary>
		/// <remarks>This rather wordy option basically means that both the location and the description of the occupation are within the same field in the GEDCOM file. (If the source of your GEDCOM file is FTW (Family Tree Maker) then set this option to true; otherwise leave cleared ).</remarks>
      public bool OccLocEqualsOccText =  false;
		/// <summary>
		/// Extra text to be displayed on the Occupations page
		/// </summary>
		/// <remarks>This text may contain embedded HTML</remarks>
		[XmlElement("OccupationsPageText", Type = typeof(CDATA))]
      public CDATA OccupationsPageText;
		/// <summary>
		/// Title for Occupation page
		/// </summary>
		/// <remarks>The default is "Occupations"</remarks>
      public string OccupationsPageTitle = "Occupations";
		/// <summary>
		/// Determines whether the file extension for web pages is .htm or .html
		/// </summary>
		/// <remarks>0=.html; 1=.htm</remarks>
      public int PageFileExtension = 0;
		/// <summary>
		/// Specifies the page style where 0 = the classic Family Pages and 1 = the Persons Pages introduced in rls 9.
		/// </summary>
      public int PageStyle = 0;
		/// <summary>
		/// Properties for the Person pages
		/// </summary>
      public PersonPagesProperties PersonPages =  new PersonPagesProperties();
		/// <summary>
		/// Mark information for individuals currently living as private. With this option on any data (notes, etc.) for individual with a valid birth date less than 80 years the birth date only will be marked as private. [private]. However to best address privacy issues it better to filter your GEDCOM at the time that you export it from your genealogy software.
		/// </summary>
		/// <remarks>The "Privacy" and the "ExcludeNotes" option either mark an individual as private (displaying only the indvidual's name), exclude all notes or excludes an individual (and associated information) based on birth date. It is best to use whatever export filtering options that your genealogy software provides. It some cases you may need to edit the GEDCOM file by-hand which  may be daunting task for some.</remarks>
      public bool Privacy =  true;
		/// <summary>
		/// A description for the UncleGED Project
		/// </summary>
      public string ProjectName =  "New Uncle GED Project";
		/// <summary>
		/// When set to true the Sources ("Bibliography ") Page is opened in a new browser window.
		/// </summary>
		/// <remarks>Sets target=_blank for the link</remarks>
      public bool SourcesInNewWindow =  true;
		/// <summary>
		/// Title for the Sources page
		/// </summary>
      public string SourcesPageTitle = "Bibliography";
		/// <summary>
		/// Extra text to be displayed on the Stats page
		/// </summary>
		/// <remarks>This text may contain embedded HTML</remarks>
		[XmlElement("StatsPageText", Type = typeof(CDATA))]
      public CDATA StatsPageText;
		/// <summary>
		/// Title for the Stats page
		/// </summary>
      public string StatsPageTitle = "Statistics";
		/// <summary>
		/// Display surnames in uppercase
		/// </summary>
      public bool SurnamesAllCaps =  true;
		/// <summary>
		/// Title for the Surnames page
		/// </summary>
      public string SurnamesPageTitle = "Surnames";
		/// <summary>
		/// Extra text to be displayed on the Surnames page
		/// </summary>
		/// <remarks>This text may contain embedded HTML</remarks>
		[XmlElement("SurnamesPageText", Type = typeof(CDATA))]
      public CDATA SurnamesPageText;
		/// <summary>
		/// Use background image (images/ug_bkgrd.gif)
		/// </summary>
		/// <remarks>With this option the ug_bkgrd.gif file located normally "C:\PROGRAM FILES\UNCLEGED\HTML\IMAGES" will be used as the background for all HTML files produced by UncleGED. NOTE: As of UncleGED 4.01, you may specify any background image and location for that image that you wish.</remarks>
      public bool UseBackground =  true;
		/// <summary>
		/// Use banner image (images/ug_banner.gif)
		/// </summary>
		/// <remarks>With this option the ug_banner.gif file located normally "C:\PROGRAM FILES\UNCLEGED\HTMl\IMAGES" will be used as the banner for all HTML files produced by UncleGED. NOTE: As of UncleGED 4.01, you may specify any banner image and location for that image that you wish. The size that I used for my banner is 224 X 38, but you may use any size that you like.</remarks>
      public bool UseBanner =  true;
		/// <summary>
		/// Use cascading style sheet
		/// </summary>
		/// <remarks>Deprecated in version 9.08 see <see cref="CSSOption">CssOption</see></remarks>
      public bool UseCSS =  true;
		/// <summary>
		/// The tag-to-text file (tagtotext.txt) allows for changing the wording or even the language for GEDCOM tags found the GEDCOM data file.
		/// </summary>
		/// <remarks>This file can be found in My Documents\My UncleGED</remarks>
      public bool UseTagToText =  false;
		/// <summary>
		/// Specifies the target of "Home" and "Table of Contents"
		/// </summary>
		/// <remarks>This option setting is found on the Author tab just beneath the "Home Page". if this option is selected then all "Home" and "Table of Contents" links will point the URI specified in the "Home Page" entry. If this option is not selected then default index.htm becomes the target of "Home" and "Table of Contents".</remarks>
		public bool HomeEqualsHomePage = false;
		/// <summary>
		/// Adds a pedigree diagram to the persons pages
		/// </summary>
		public bool AddPedigreeToPerson = false;
		/// <summary>
		/// If true will create a RSS feed "rssfeed.xml" containing a listing of the most recent changes.
		/// See also <see cref="RssRootURL"/>, <see cref="RssDescription"/>, and <see cref="DaysRecent"/>
		/// </summary>
		/// <remarks>
		/// Added in 9.8
		/// Use of this feature requires that GEDCOM contain a "last changed" date for individuals and not all genealogy software produces this information. A "last changed" date would appear in the GEDCOM as for example:
		/// 1 CHAN
		/// 2 DATE 30 SEP 2007
		/// </remarks>
		public bool CreateRssFeed;
		/// <summary>
		/// This is the site root URL used for constructing links in RSS feed
		/// </summary>
		public string RssRootURL = "";
		/// <summary>
		/// Name of CSS file to copy to html directory
		/// </summary>
		public string CSSFile = "";
		/// <summary>
		/// Option to use CSS file. 0=no CSS, 1=uged.css, 2=copy css
		/// </summary>
		/// <remarks>
		/// <para>The default is 0 (no CSS).</para> 
		/// <para>If CSSOption = 1, UncleGED will add the following line to each web page: 
		/// &lt;LINK REL = stylesheet TYPE = text/css href=uged.css&gt; 
		/// This will allow you to use a cascading style sheet named uged.css to change the appearance of the web pages that UncleGED produces. Example if the uged.css file contains:  body{font-family: Arial;}  This will change the font from the default to Arial.  
		/// See <a href="../html/uged019.htm">Guide To UGED.CSS Classes</a></para>
		/// <para>If CSSOption=2, UncleGED will copy file specified by <see cref="CSSFile">CSSFile</see> from the location (path) where CSSFile resides.</para>
		/// </remarks>
		public int CSSOption = 0;
		/// <summary>
		/// Description for RSS Feed
		/// </summary>
		public string RssDescription;
		///// <summary>
		///// If true, a link for the RSS feed will be displayed each page's footer.
		///// </summary>
		///// <remarks><see cref="CreateRssFeed">CreateRssFeed</see> must be true.</remarks>
		//public bool RssLinkInFooter;
		/// <summary>
		/// Last change date must at least this number of days old to be considered for highlighting and inclusion in the RSS Feed
		/// </summary>
		/// <remarks>Added in version 9.08. Prior to ver. 9.08 this was fixed at 90 days. The default value for this property is 90.</remarks>
		public int DaysRecent = 90;
		///// <summary>
		///// If true adds a link for RSS Feed for Google Reader to each page's footer
		///// </summary>
		///// <remarks><see cref="CreateRssFeed">CreateRssFeed</see> must be true.</remarks>
		//public bool RssLinkForGoogleReader;
		/// <summary>
		/// Numbering style for the descendant outline
		/// </summary>
		/// <remarks>
		/// <para>Valid values are:</para>
		/// <para>0 = d'Aboville (1. 1.1 1.2 1.2.1)</para>
		/// <para>1 = Henry Numbers (1 11 12 (10))</para>
		/// <para>2 = Modified Henry Numbers (where A, B, C,etc. is used in place of (10) (11) (12) etc.)</para>
		/// </remarks>
		public int DotlNumberingStyle = 0;
		/// <summary>
		/// Maximum number of generations displayed in descendant outline
		/// </summary>
		/// <remarks>Valid values are 1 to 15. If outside this range default of 10 is used.</remarks>
		public int DotlNumGenerations = 10;
		/// <summary>
		/// Flag tells <see cref="UncleGED.GedReader.SaveAsHTM"/> to create one or more descendant outlines
		/// </summary>
		public bool DotlCreateDescendantOutline = false;
		/// <summary>
		/// Comma-delimited list of individuals for whom to create descendant outlines
		/// </summary>
		public string DotlIndividuals = "";
		/// <summary>
		/// Create links for Second Site instead of UncleGED
		/// </summary>
		/// <tocexclude />
		public bool DotlSSLinks = false;
		/// <summary>
		/// Maximum number of generations displayed in Ahnentafels
		/// </summary>
		public int AhnNumGenerations = 10;
		/// <summary>
		/// Flag tells <see cref="UncleGED.GedReader.SaveAsHTM"/> to create one or more ahnentafels
		/// </summary>
		public bool AhnCreateAhnentafels = false;
		/// <summary>
		/// Comma-delimited list of individuals for whom to create Ahnentafels
		/// </summary>
		public string AhnIndividuals = "";
		/// <summary>
		/// Create links on ahnentafels for Second Site instead of UncleGED
		/// </summary>
		/// <tocexclude />
		public bool AhnSSLinks = false;
		#endregion
		/// <summary>
		/// If true then will not display last updated message on table contents page
		/// </summary>
		public bool SuppressLastUpdateOnHomePage = false;

		/// <summary>
		/// Constructor for a new UncleGED Project
		/// </summary>
      public UGedProject()
      {
         IndiIndexPageText = new CDATA("");
         StatsPageText = new CDATA("");
         MainPageText = new CDATA("");
         ChronoPageText = new CDATA("");
         LocationsPageText = new CDATA("");
         OccupationsPageText = new CDATA("");         
         SurnamesPageText = new CDATA("");

      }
   }

   #region Old uged project class

   //   public class UGedProject
//   {

//      public UGedProject()
//      {

//         string path = VbTools.GetUserPath();

//         //set the defaults
//         mvarPrivacy = true;
//         mvarAuthorsEmail = "";
//         mvarAuthorsName = "";
//         mvarAddUserCopyright = false;
//         mvarDisplayMRIN = true;
//         mvarDisplayRIN = true;
//         mvarAuthorsUrl = "";
//         mvarCreateGendexFile = false;
//         mvarMainPageTitle = "My Family";
//         mvarUseBackground = true;
//         mvarUseBanner = true;
//         mvarBackgroundFile = "./images/ug_bkgrd.gif";
//         mvarBannerFile = "images/ug_banner.gif";
//         mvarExcludeNotes = false;
//         mvarAddKeywords = true;
//         mvarWarnNonAnsi = false;
//         mvarAddSurnameCount = true;
//         mvarCreateListReport = true;
//         mvarCreateStatsPage = true;
//         mvarCreateChronoPage = true;
//         mvarChronoCutOff = 1900;
//         mvarFamFilePrefix = "fam";
//         mvarChronoLinks = true;
//         mvarSurnamesAllCaps = true;
//         mvarMostRecentOnIndex = true;
//         mvarMostRecentOnPage = true;
//         mvarHiLiteMostRecent = true;
//         mvarCreateLocPage = true;
//         mvarLocDisplayEventDates = false;
//         mvarLocEstimateMethod = 1;
//         mvarLocReverseOrder = true;
//         mvarIgnoreOccupations = true;
//         mvarCreateOccupationsPage = true;
//         mvarOccLocEqualsOccText = false;
//         mvarHtmlPath = path + "\\html";
//         mvarGedcomPath = path + "\\gedcom";

//         //added in 6.2
//         mvarDoDateEstimation = false;
//         mvarBirthCutOffYears = 80;
//         mvarExcludeLivingIndividualsAfterBirthCutOff = false;
//         //added in 6.4
//         mvarFtpRemoteServer = "";
//         mvarFtpRemoteDirectory = "";
//         mvarFtpUserName = "";
//         mvarFtpPassword = "";
//         mvarFtpSavePassword = false;
//         mvarUseCSS = true;

//         mvarSourcesInNewWindow = true; //the old default

//         //added in 8.0
//         mvarGedComFile = "temp_ged55.ged";
//         mvarProjectName = "New Uncle GED Project";
//         mvarFirstFamily = 0;

//         mvarHtmlHelpCompiler = @"C:\Program Files\HTML Help Workshop";
//         mvarDoCompileHtml = false;

//         //added in 9.0
//         mvarPageStyle = 0; //0=family group pages 1=individuals
//         mvarMaxIndiPerPage = 30; //max num individuals per page
//         mvarAddSpaceToConc = false;
//         mvarUseTagToText = false;
//         mvarDateStrings = new cDateStrings();
//         mvarPersonPages = new cPersonPages();
//         mvarLocStripTrailingPunc = false;
//      }

//#region Private Locals
//      private bool mvarPrivacy;
//      private bool mvarUseBackground;
//      private bool mvarUseBanner;
//      private short mvarWriteOption;
//      private bool mvarExcludeNotes;
//      private string mvarFileSource;
//      private bool mvarTabDelimit;
//      private bool mvarAddKeywords;
//      private bool mvarAddSurnameCount;
//      private bool mvarCreateListReport;
//      private bool mvarCreateStatsPage;
//      private string mvarAuthorsName;
//      private string mvarAuthorsEmail;
//      private bool mvarDisplayRIN;
//      private bool mvarDisplayMRIN;
//      private bool mvarAddUserCopyright;
//      private string mvarAuthorsUrl;
//      private bool mvarCreateGendexFile;
//      private bool mvarWarnNonAnsi;
//      private bool mvarCreateChronoPage;
//      private short mvarChronoCutOff;
//      private bool mvarChronoLinks;
//      private bool mvarSurnamesAllCaps;
//      private bool mvarMostRecentOnPage;
//      private bool mvarMostRecentOnIndex;
//      private bool mvarHiLiteMostRecent;
//      private bool mvarCreateLocPage;
//      private bool mvarLocReverseOrder;
//      private short mvarLocEstimateMethod;
//      private bool mvarLocDisplayEventDates;
//      private bool mvarIgnoreOccupations;
//      private bool mvarCreateOccupationsPage;
//      private bool mvarOccLocEqualsOccText;
//      private string mvarBackgroundFile;
//      private string mvarBannerFile;
//      private string mvarGedcomPath;
//      private string mvarHtmlPath;
//      private string mvarMainPageTitle;
//      private string mvarFamFilePrefix;

//      //added in 6.2
//      private bool mvarDoDateEstimation;
//      private int mvarBirthCutOffYears;
//      private bool mvarExcludeLivingIndividualsAfterBirthCutOff;

//      //added in 6.4
//      private string mvarFtpRemoteServer;
//      private string mvarFtpRemoteDirectory;
//      private string mvarFtpUserName;
//      private string mvarFtpPassword;
//      private bool mvarFtpSavePassword;
//      private bool mvarUseCSS;

//      private bool mvarSourcesInNewWindow;

//      //added in 8.0
//      private string mvarGedComFile;
//      private string mvarProjectName;
//      private int mvarFirstFamily;

//      private string mvarHtmlHelpCompiler;
//      private bool mvarDoCompileHtml;

//      //added in 9.0
//      private int mvarPageStyle; //0=family group pages 1=individuals
//      private int mvarMaxIndiPerPage; //max num individuals per page
//      private bool mvarAddSpaceToConc;

//      private bool mvarUseTagToText;

//      private cDateStrings mvarDateStrings;

//      private cPersonPages mvarPersonPages;

//      private int mvarMaxLivingAge = 75;
//      private int mvarMinMarrAge = 20;
//      private int mvarMinChildBirth = 20;
//      private int mvarMaxChildBirth = 50;
//      private int mvarAboutEquals = 2;
//      private int mvarMaxAgeDifference = 10;
//      private int mvarMaxIterations = 5;

//      //CHANGE: added option to strip trailing puncuation from location (PLAC) data
//      private bool mvarLocStripTrailingPunc;
//#endregion
//      /// <summary>
//      /// specifies whether to use html or htm as the page file extension
//      /// </summary>
//      private int mvarPageFileExtension = 0;

//#region Properties
//      public string ProjectName
//      {
//         get { return mvarProjectName; }
//         set { mvarProjectName = value; }
//      }

//      public string HtmlHelpCompiler
//      {
//         get { return mvarHtmlHelpCompiler; }
//         set { mvarHtmlHelpCompiler = value; }
//      }

//      public bool DoCompileHtml
//      {
//         get { return mvarDoCompileHtml; }
//         set { mvarDoCompileHtml = value; }
//      }

//      public bool UseCSS
//      {
//         get
//         {
//            return mvarUseCSS;
//         }
//         set
//         {
//            mvarUseCSS = value;
//         }
//      }

//      public int FirstFamily
//      {
//         get
//         {
//            return mvarFirstFamily;
//         }
//         set
//         {
//            mvarFirstFamily = value;
//         }
//      }

//      public string FtpRemoteServer
//      {
//         get
//         {
//            return mvarFtpRemoteServer;
//         }
//         set
//         {
//            mvarFtpRemoteServer = value;
//         }
//      }

//      public string FtpRemoteDirectory
//      {
//         get
//         {
//            return mvarFtpRemoteDirectory;
//         }
//         set
//         {
//            mvarFtpRemoteDirectory = value;
//         }
//      }

//      public string FtpUserName
//      {
//         get
//         {
//            return mvarFtpUserName;
//         }
//         set
//         {
//            mvarFtpUserName = value;
//         }
//      }

//      public string FtpPassword
//      {
//         get
//         {
//            return mvarFtpPassword;
//         }
//         set
//         {
//            mvarFtpPassword = value;
//         }
//      }

//      public bool FtpSavePassword
//      {
//         get
//         {
//            return mvarFtpSavePassword;
//         }
//         set
//         {
//            mvarFtpSavePassword = value;
//         }
//      }

//      public bool ExcludeLivingIndividualsAfterBirthCutOff
//      {
//         get
//         {
//            return mvarExcludeLivingIndividualsAfterBirthCutOff;
//         }
//         set
//         {
//            mvarExcludeLivingIndividualsAfterBirthCutOff = value;
//         }
//      }

//      public int BirthCutOffYears
//      {
//         get
//         {
//            return mvarBirthCutOffYears;
//         }
//         set
//         {
//            mvarBirthCutOffYears = value;
//         }
//      }

//      public bool DoDateEstimation
//      {
//         get
//         {
//            return mvarDoDateEstimation;
//         }
//         set
//         {
//            mvarDoDateEstimation = value;
//         }
//      }

//      public string FamFilePrefix
//      {
//         get
//         {
//            return mvarFamFilePrefix;
//         }
//         set
//         {
//            mvarFamFilePrefix = value;
//         }
//      }

//      public string MainPageTitle
//      {
//         get
//         {
//            return mvarMainPageTitle;
//         }
//         set
//         {
//            mvarMainPageTitle = value;
//         }
//      }

//      public string HtmlPath
//      {
//         get
//         {
//            return mvarHtmlPath;
//         }
//         set
//         {
//            mvarHtmlPath = value;
//         }
//      }

//      public string GedcomPath
//      {
//         get
//         {
//            return mvarGedcomPath;
//         }
//         set
//         {
//            mvarGedcomPath = value;
//         }
//      }

//      public string GedComFile
//      {
//         get { return mvarGedComFile; }
//         set { mvarGedComFile = value; }
//      }

//      public string BannerFile
//      {
//         get
//         {
//            return mvarBannerFile;
//         }
//         set
//         {
//            mvarBannerFile = value;
//         }
//      }

//      public string BackgroundFile
//      {
//         get
//         {
//            return mvarBackgroundFile;
//         }
//         set
//         {
//            mvarBackgroundFile = value;
//         }
//      }


//      public bool OccLocEqualsOccText
//      {
//         get
//         {
//            return mvarOccLocEqualsOccText;
//         }
//         set
//         {
//            mvarOccLocEqualsOccText = value;
//         }
//      }

//      public bool CreateOccupationsPage
//      {
//         get
//         {
//            return mvarCreateOccupationsPage;
//         }
//         set
//         {
//            mvarCreateOccupationsPage = value;
//         }
//      }


//      public bool IgnoreOccupations
//      {
//         get
//         {
//            return mvarIgnoreOccupations;
//         }
//         set
//         {
//            mvarIgnoreOccupations = value;
//         }
//      }


//      public bool LocDisplayEventDates
//      {
//         get
//         {
//            return mvarLocDisplayEventDates;
//         }
//         set
//         {
//            mvarLocDisplayEventDates = value;
//         }
//      }


//      public short LocEstimateMethod
//      {
//         get
//         {
//            return mvarLocEstimateMethod;
//         }
//         set
//         {
//            mvarLocEstimateMethod = value;
//         }
//      }


//      public bool LocReverseOrder
//      {
//         get
//         {
//            return mvarLocReverseOrder;
//         }
//         set
//         {
//            mvarLocReverseOrder = value;
//         }
//      }

//      public bool LocStripTrailingPunc
//      {
//         get
//         {
//            return mvarLocStripTrailingPunc;
//         }
//         set
//         {
//            mvarLocStripTrailingPunc = value;
//         }
//      }

//      public bool CreateLocPage
//      {
//         get
//         {
//            return mvarCreateLocPage;
//         }
//         set
//         {
//            mvarCreateLocPage = value;
//         }
//      }


//      public bool HiLiteMostRecent
//      {
//         get
//         {
//            return mvarHiLiteMostRecent;
//         }
//         set
//         {
//            mvarHiLiteMostRecent = value;
//         }
//      }


//      public bool MostRecentOnIndex
//      {
//         get
//         {
//            return mvarMostRecentOnIndex;
//         }
//         set
//         {
//            mvarMostRecentOnIndex = value;
//         }
//      }


//      public bool MostRecentOnPage
//      {
//         get
//         {
//            return mvarMostRecentOnPage;
//         }
//         set
//         {
//            mvarMostRecentOnPage = value;
//         }
//      }


//      public bool SurnamesAllCaps
//      {
//         get
//         {
//            return mvarSurnamesAllCaps;
//         }
//         set
//         {
//            mvarSurnamesAllCaps = value;
//         }
//      }


//      public bool ChronoLinks
//      {
//         get
//         {
//            return mvarChronoLinks;
//         }
//         set
//         {
//            mvarChronoLinks = value;
//         }
//      }


//      public short ChronoCutOff
//      {
//         get
//         {
//            return mvarChronoCutOff;
//         }
//         set
//         {
//            mvarChronoCutOff = value;
//         }
//      }


//      public bool CreateChronoPage
//      {
//         get
//         {
//            return mvarCreateChronoPage;
//         }
//         set
//         {
//            mvarCreateChronoPage = value;
//         }
//      }


//      public bool WarnNonAnsi
//      {
//         get
//         {
//            return mvarWarnNonAnsi;
//         }
//         set
//         {
//            mvarWarnNonAnsi = value;
//         }
//      }



//      public bool CreateGendexFile
//      {
//         get
//         {
//            return mvarCreateGendexFile;
//         }
//         set
//         {
//            mvarCreateGendexFile = value;
//         }
//      }



//      public string AuthorsUrl
//      {
//         get
//         {
//            return mvarAuthorsUrl;
//         }
//         set
//         {
//            mvarAuthorsUrl = value;
//         }
//      }


//      public bool AddUserCopyright
//      {
//         get
//         {
//            return mvarAddUserCopyright;
//         }
//         set
//         {
//            mvarAddUserCopyright = value;
//         }
//      }



//      public bool DisplayMRIN
//      {
//         get
//         {
//            return mvarDisplayMRIN;
//         }
//         set
//         {
//            mvarDisplayMRIN = value;
//         }
//      }


//      public bool DisplayRIN
//      {
//         get
//         {
//            return mvarDisplayRIN;
//         }
//         set
//         {
//            mvarDisplayRIN = value;
//         }
//      }


//      public string AuthorsEmail
//      {
//         get
//         {
//            return mvarAuthorsEmail;
//         }
//         set
//         {
//            mvarAuthorsEmail = value;
//         }
//      }


//      public string AuthorsName
//      {
//         get
//         {
//            return mvarAuthorsName;
//         }
//         set
//         {
//            mvarAuthorsName = value;
//         }
//      }


//      public bool CreateStatsPage
//      {
//         get
//         {
//            return mvarCreateStatsPage;
//         }
//         set
//         {
//            mvarCreateStatsPage = value;
//         }
//      }


//      public bool CreateListReport
//      {
//         get
//         {
//            return mvarCreateListReport;
//         }
//         set
//         {
//            mvarCreateListReport = value;
//         }
//      }


//      public bool AddSurnameCount
//      {
//         get
//         {
//            return mvarAddSurnameCount;
//         }
//         set
//         {
//            mvarAddSurnameCount = value;
//         }
//      }


//      public bool AddKeywords
//      {
//         get
//         {
//            return mvarAddKeywords;
//         }
//         set
//         {
//            mvarAddKeywords = value;
//         }
//      }


//      public bool TabDelimit
//      {
//         get
//         {
//            return mvarTabDelimit;
//         }
//         set
//         {
//            mvarTabDelimit = value;
//         }
//      }


//      public string FileSource
//      {
//         get
//         {
//            return mvarFileSource;
//         }
//         set
//         {
//            mvarFileSource = value;
//         }
//      }


//      public bool ExcludeNotes
//      {
//         get
//         {
//            return mvarExcludeNotes;
//         }
//         set
//         {
//            mvarExcludeNotes = value;
//         }
//      }

//      public short WriteOption
//      {
//         get
//         {
//            return mvarWriteOption;
//         }
//         set
//         {
//            mvarWriteOption = value;
//         }
//      }


//      public bool UseBanner
//      {
//         get
//         {
//            return mvarUseBanner;
//         }
//         set
//         {
//            mvarUseBanner = value;
//         }
//      }


//      public bool UseBackground
//      {
//         get
//         {
//            return mvarUseBackground;
//         }
//         set
//         {
//            mvarUseBackground = value;
//         }
//      }


//      public bool Privacy
//      {
//         get
//         {
//            return mvarPrivacy;
//         }
//         set
//         {
//            mvarPrivacy = value;
//         }
//      }

//      public bool SourcesInNewWindow
//      {
//         get { return mvarSourcesInNewWindow; }
//         set { mvarSourcesInNewWindow = value; }
//      }


//      public int MaxLivingAge
//      {
//         get
//         {
//            return mvarMaxLivingAge;
//         }
//         set
//         {
//            mvarMaxLivingAge = value;
//         }
//      }

//      public int MinMarrAge
//      {
//         get
//         {
//            return mvarMinMarrAge;
//         }
//         set
//         {
//            mvarMinMarrAge = value;
//         }
//      }

//      public int MinChildBirth
//      {
//         get
//         {
//            return mvarMinChildBirth;
//         }
//         set
//         {
//            mvarMinChildBirth = value;
//         }
//      }

//      public int MaxChildBirth
//      {
//         get
//         {
//            return mvarMaxChildBirth;
//         }
//         set
//         {
//            mvarMaxChildBirth = value;
//         }
//      }

//      public int AboutEquals
//      {
//         get
//         {
//            return mvarAboutEquals;
//         }
//         set
//         {
//            mvarAboutEquals = value;
//         }
//      }

//      public int MaxAgeDifference
//      {
//         get
//         {
//            return mvarMaxAgeDifference;
//         }
//         set
//         {
//            mvarMaxAgeDifference = value;
//         }

//      }

//      public int MaxIterations
//      {
//         get
//         {
//            return mvarMaxIterations;
//         }
//         set
//         {
//            mvarMaxIterations = value;
//         }
//      }

//      public int PageStyle
//      {
//         get { return mvarPageStyle; }
//         set { mvarPageStyle = value; }
//      }

//      public int MaxIndPerPage
//      {
//         get { return mvarMaxIndiPerPage; }
//         set { mvarMaxIndiPerPage = value; }
//      }


//      public bool AddSpaceToConc
//      {
//         get { return mvarAddSpaceToConc; }
//         set { mvarAddSpaceToConc = value; }
//      }


//      public bool UseTagToText
//      {
//         get { return mvarUseTagToText; }
//         set { mvarUseTagToText = value; }
//      }

//      public cDateStrings DateStrings
//      {
//         get { return mvarDateStrings; }
//         set { mvarDateStrings = value; }
//      }

//      public cPersonPages PersonPages
//      {
//         get { return mvarPersonPages; }
//         set { mvarPersonPages = value; }
//      }

//#endregion

   //   }

   #endregion


	/// <summary>
	/// Class containing properties for strings displayed on person pages.
	/// </summary>
	/// <tocexclude/>
	public class PersonPagesProperties
   {
      /// <summary>
      /// Configuration properties for person pages
      /// </summary>
      public PersonPagesProperties()
      {
         mvarPageTitleString = "Person Page - [N]";
         mvarBornString = "b.";
         mvarDiedString = "d.";
         mvarMarriedString = "m.";
         mvarFatherString = "Father";
         mvarMotherString = "Mother";
         mvarMaleString = "M";
         mvarFemaleString = "F";
         mvarFamilyString = "Family";
         mvarSourcesString = "Sources";
         mvarNotesString = "Notes";
			mvarPedigreeString = "Pedigree";
         mvarMarriageString = "Marriage";
         mvarLastUpdatedString = "Last Updated";
         mvarLastUpdatedDisplay = true;
      }

      private string mvarPageTitleString;
		/// <summary>
		/// Title of persons page
		/// </summary>
		/// <remarks>Use "Person Page - [N]" where N will become the page number</remarks>
      public string PageTitleString
      {
         get { return mvarPageTitleString; }
         set { mvarPageTitleString = value; }
      }
      private string mvarBornString;
		/// <summary>
		/// Data label for event
		/// </summary>
      public string BornString
      {
         get { return mvarBornString; }
         set { mvarBornString = value; }
      }
      private string mvarDiedString;
		/// <summary>
		/// Data label for event
		/// </summary>
      public string DiedString
      {
         get { return mvarDiedString; }
         set { mvarDiedString = value; }
      }
      private string mvarMarriedString;
		/// <summary>
		/// Label for married event
		/// </summary>
      public string MarriedString
      {
         get { return mvarMarriedString; }
         set { mvarMarriedString = value; }
      }
      private string mvarFatherString;
		/// <summary>
		/// Data label for event
		/// </summary>
      public string FatherString
      {
         get { return mvarFatherString; }
         set { mvarFatherString = value; }
      }
      private string mvarMotherString;
		/// <summary>
		/// Label for mother
		/// </summary>
      public string MotherString
      {
         get { return mvarMotherString; }
         set { mvarMotherString = value; }
      }
      private string mvarMaleString;
		/// <summary>
		/// Label for male
		/// </summary>
      public string MaleString
      {
         get { return mvarMaleString; }
         set { mvarMaleString = value; }
      }
      private string mvarFemaleString;
		/// <summary>
		/// Data label for event
		/// </summary>
      public string FemaleString
      {
         get { return mvarFemaleString; }
         set { mvarFemaleString = value; }
      }
      private string mvarFamilyString;
		/// <summary>
		/// Data label for event
		/// </summary>
      public string FamilyString
      {
         get { return mvarFamilyString; }
         set { mvarFamilyString = value; }
      }
      private string mvarSourcesString;
		/// <summary>
		/// Label for sources section
		/// </summary>
      public string SourcesString
      {
         get { return mvarSourcesString; }
         set { mvarSourcesString = value; }
      }
      private string mvarNotesString;
		/// <summary>
		/// Label for notes section
		/// </summary>
      public string NotesString
      {
         get { return mvarNotesString; }
         set { mvarNotesString = value; }
      }
		private string mvarPedigreeString;
		/// <summary>
		/// Label for pedigree section
		/// </summary>
		public string PedigreeString
		{
			get { return mvarPedigreeString; }
			set { mvarPedigreeString = value; }
		}
      private string mvarMarriageString;
		/// <summary>
		/// Label for marriage event
		/// </summary>
      public string MarriageString
      {
         get { return mvarMarriageString; }
         set { mvarMarriageString = value; }
      }
      private string mvarLastUpdatedString;
		/// <summary>
		/// Label for last update
		/// </summary>
      public string LastUpdatedString
      {
         get { return mvarLastUpdatedString; }
         set { mvarLastUpdatedString = value; }
      }
      private bool mvarLastUpdatedDisplay;
		/// <summary>
		/// Display last update (yes or no)
		/// </summary>
      public bool LastUpdatedDisplay
      {
         get { return mvarLastUpdatedDisplay; }
         set { mvarLastUpdatedDisplay = value; }
      }

   }

   /// <summary>
   /// Class for transforming GEDCOM date specifiers
   /// </summary>
	/// <tocexclude/>
	public class DateStringProperties
   {
		/// <summary>
		/// Constructor for date string properties
		/// </summary>
      public DateStringProperties()
      {
         mvarFROM = "from";
         mvarTO = "to";
         mvarBEF = "bef.";
         mvarAFT = "aft.";
         mvarBET = "bet.";
         mvarAND = "and";
         mvarABT = "abt.";
         mvarEST = "(est)";
         mvarCAL = "(calc)";
         mvarINT = "int.";

      }

      private string mvarFROM;
		/// <summary>
		/// Date label
		/// </summary>
      public string FROM
      {
         get { return mvarFROM; }
         set { mvarFROM = value; }
      }
      private string mvarTO;
		/// <summary>
		/// Date label
		/// </summary>
      public string TO
      {
         get { return mvarTO; }
         set { mvarTO = value; }
      }
      private string mvarBEF;
		/// <summary>
		/// Date label
		/// </summary>
      public string BEF
      {
         get { return mvarBEF; }
         set { mvarBEF = value; }
      }
      private string mvarAFT;
		/// <summary>
		/// Date label
		/// </summary>
      public string AFT
      {
         get { return mvarAFT; }
         set { mvarAFT = value; }
      }
      private string mvarBET;
		/// <summary>
		/// Date label
		/// </summary>
      public string BET
      {
         get { return mvarBET; }
         set { mvarBET = value; }
      }
      private string mvarAND;
		/// <summary>
		/// Date label
		/// </summary>
      public string AND
      {
         get { return mvarAND; }
         set { mvarAND = value; }
      }
      private string mvarABT;
		/// <summary>
		/// Date label
		/// </summary>
      public string ABT
      {
         get { return mvarABT; }
         set { mvarABT = value; }
      }
      private string mvarEST;
		/// <summary>
		/// Date label
		/// </summary>
      public string EST
      {
         get { return mvarEST; }
         set { mvarEST = value; }
      }
      private string mvarCAL;
		/// <summary>
		/// Date label
		/// </summary>
      public string CAL
      {
         get { return mvarCAL; }
         set { mvarCAL = value; }
      }
      private string mvarINT;
		/// <summary>
		/// Date label
		/// </summary>
      public string INT
      {
         get { return mvarINT; }
         set { mvarINT = value; }
      }

   }

   /// <summary>
   /// Class for serializing CDATA
   /// </summary>
	/// <tocexclude/>
   public class CDATA : IXmlSerializable
   {

      private string text;

		/// <summary>
		/// Constructor for CDATA
		/// </summary>
      public CDATA()

      { }

		/// <summary>
		/// Constructor for CDATA
		/// </summary>
		/// <param name="text">text contained in CDATA</param>
      public CDATA(string text)
      {

         this.text = text;

      }

		/// <summary>
		/// text contained in CDATA
		/// </summary>
      public string Text
      {

         get { return text; }

      }

      XmlSchema IXmlSerializable.GetSchema()
      {

         return null;

      }

      void IXmlSerializable.ReadXml(XmlReader reader)
      {

         this.text = reader.ReadString();
         reader.Read();

      }

      void IXmlSerializable.WriteXml(XmlWriter writer)
      {

         writer.WriteCData(this.text);

      }

   }

}